package model

import (
	"gorm.io/gorm"
	"micro-chat/config"
	"time"
)

type User struct {
	Id            uint32         `gorm:"column:id;type:int UNSIGNED;comment:用户ID;primaryKey;not null;" json:"id"`                                         // 用户ID
	Phone         string         `gorm:"column:phone;type:char(11);comment:账号;not null;" json:"phone"`                                                    // 账号
	Password      string         `gorm:"column:password;type:char(32);comment:密码;not null;" json:"password"`                                              // 密码
	Nickname      string         `gorm:"column:nickname;type:varchar(50);comment:昵称;not null;" json:"nickname"`                                           // 昵称
	Avatar        string         `gorm:"column:avatar;type:varchar(300);comment:头像;default:NULL;" json:"avatar"`                                          // 头像
	Signature     string         `gorm:"column:signature;type:text;comment:个性签名;" json:"signature"`                                                     // 个性签名
	Region        string         `gorm:"column:region;type:varchar(50);comment:地区信息;default:NULL;" json:"region"`                                       // 地区信息
	LastLoginTime time.Time      `gorm:"column:last_login_time;type:datetime(3);comment:最后登陆时间;default:CURRENT_TIMESTAMP(3);" json:"last_login_time"` // 最后登陆时间
	OnlineStatus  int8           `gorm:"column:online_status;type:tinyint;comment:在线状态: 0:离线 1:在线;not null;default:0;" json:"online_status"`        // 在线状态: 0:离线 1:在线
	Status        int8           `gorm:"column:status;type:tinyint;comment:账号状态: 0:禁用 1:正常;not null;default:1;" json:"status"`                      // 账号状态: 0:禁用 1:正常
	CreatedAt     time.Time      `gorm:"column:created_at;type:datetime(3);comment:注册时间;not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"`      // 注册时间
	UpdatedAt     time.Time      `gorm:"column:updated_at;type:datetime(3);comment:修改时间;not null;default:CURRENT_TIMESTAMP(3);" json:"updated_at"`      // 修改时间
	DeletedAt     gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
}

func (u *User) TableName() string {
	return "user"
}

// 注册
func (u *User) RegisterUser() error {
	return config.DB.Create(&u).Error
}

// 登陆
func (u *User) LoginUser() error {
	return config.DB.Where("phone = ?", u.Phone).Find(&u).Error
}

// 更新
func (u *User) UpdateUser() error {
	return config.DB.Updates(&u).Error
}

// 搜索
func (u *User) FindUserByKey(key string) (list []*User, err error) {
	err = config.DB.
		Where("phone like ? or nickname like ?", key+"%", "%"+key+"%").
		Find(&list).Error
	return
}

// id
func (u *User) FindUser(id uint) error {
	return config.DB.Where("id  = ?", id).Find(&u).Error
}
